// 版权所有2009 Go作者。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package http

// 在IANA注册的HTTP状态码。
// 参见：https:
const (
	StatusSwitchingProtocols = 101 // RFC 7231，6.2.2.2.2 

	StatusMultiStatus          = 207 // RFC 4918，11.1 
	StatusAlreadyReported      = 208 // RFC 5842，7.1 
	StatusIMUsed               = 226 // RFC 3229，10.4.1 

	StatusMultipleChoices   = 300 // RFC 7231，6.4.1 
	StatusMovedPermanently  = 301 // RFC 7231，6.4.2 
	StatusTemporaryRedirect = 307 // RFC 7231，6.4.7 
	StatusPermanentRedirect = 308 // RFC 7538，3 

	StatusBadRequest                   = 400 // RFC 7231，6.5.1 
	StatusUnauthorized                 = 401 // RFC 7235，3.1 
	StatusPaymentRequired              = 402 // RFC 7231，6.5.2 
	StatusRequestTimeout               = 408 // RFC 7231，6.5.7 
	StatusConflict                     = 409 // RFC 7231，6.5.8 
	StatusGone                         = 410 // RFC 7231，6.5.9 
	StatusLengthRequired               = 411 // RFC 7231，6.5.10 
	StatusPreconditionFailed           = 412 // RFC 7232，4.2 
	StatusTeapot                       = 418 // RFC 7168，2.3.3 
	StatusMisdirectedRequest           = 421 // RFC 7540，9.1.2 
	StatusUnprocessableEntity          = 422 // RFC 4918，11.2 
	StatusLocked                       = 423 // RFC 4918，11.3 
	StatusFailedDependency             = 424 // RFC 4918，11.4 
	StatusUpgradeRequired              = 426 // RFC 7231，6.5.15 
	StatusPreconditionRequired         = 428 // RFC 6585，3 
	StatusTooManyRequests              = 429 // RFC 6585，4 
	StatusRequestHeaderFieldsTooLarge  = 431 // RFC 6585，5 
	StatusUnavailableForLegalReasons   = 451 // RFC 7725，3 

	StatusInternalServerError           = 500 // RFC 7231，6.6.1 
	StatusVariantAlsoNegotiates         = 506 // RFC 2295，8.1 
	StatusInsufficientStorage           = 507 // RFC 4918，11.5 
	StatusLoopDetected                  = 508 // RFC 5842，7.2 
	StatusNotExtended                   = 510 // RFC 2774，7 
	StatusNetworkAuthenticationRequired = 511 // RFC 6585，6 
)

var statusText = map[int]string{
	StatusContinue:           "Continue",
	StatusSwitchingProtocols: "Switching Protocols",
	StatusProcessing:         "Processing",
	StatusEarlyHints:         "Early Hints",

	StatusOK:                   "OK",
	StatusCreated:              "Created",
	StatusAccepted:             "Accepted",
	StatusNonAuthoritativeInfo: "Non-Authoritative Information",
	StatusNoContent:            "No Content",
	StatusResetContent:         "Reset Content",
	StatusPartialContent:       "Partial Content",
	StatusMultiStatus:          "Multi-Status",
	StatusAlreadyReported:      "Already Reported",
	StatusIMUsed:               "IM Used",

	StatusMultipleChoices:   "Multiple Choices",
	StatusMovedPermanently:  "Moved Permanently",
	StatusFound:             "Found",
	StatusSeeOther:          "See Other",
	StatusNotModified:       "Not Modified",
	StatusUseProxy:          "Use Proxy",
	StatusTemporaryRedirect: "Temporary Redirect",
	StatusPermanentRedirect: "Permanent Redirect",

	StatusBadRequest:                   "Bad Request",
	StatusUnauthorized:                 "Unauthorized",
	StatusPaymentRequired:              "Payment Required",
	StatusForbidden:                    "Forbidden",
	StatusNotFound:                     "Not Found",
	StatusMethodNotAllowed:             "Method Not Allowed",
	StatusNotAcceptable:                "Not Acceptable",
	StatusProxyAuthRequired:            "Proxy Authentication Required",
	StatusRequestTimeout:               "Request Timeout",
	StatusConflict:                     "Conflict",
	StatusGone:                         "Gone",
	StatusLengthRequired:               "Length Required",
	StatusPreconditionFailed:           "Precondition Failed",
	StatusRequestEntityTooLarge:        "Request Entity Too Large",
	StatusRequestURITooLong:            "Request URI Too Long",
	StatusUnsupportedMediaType:         "Unsupported Media Type",
	StatusRequestedRangeNotSatisfiable: "Requested Range Not Satisfiable",
	StatusExpectationFailed:            "Expectation Failed",
	StatusTeapot:                       "I'm a teapot",
	StatusMisdirectedRequest:           "Misdirected Request",
	StatusUnprocessableEntity:          "Unprocessable Entity",
	StatusLocked:                       "Locked",
	StatusFailedDependency:             "Failed Dependency",
	StatusTooEarly:                     "Too Early",
	StatusUpgradeRequired:              "Upgrade Required",
	StatusPreconditionRequired:         "Precondition Required",
	StatusTooManyRequests:              "Too Many Requests",
	StatusRequestHeaderFieldsTooLarge:  "Request Header Fields Too Large",
	StatusUnavailableForLegalReasons:   "Unavailable For Legal Reasons",

	StatusInternalServerError:           "Internal Server Error",
	StatusNotImplemented:                "Not Implemented",
	StatusBadGateway:                    "Bad Gateway",
	StatusServiceUnavailable:            "Service Unavailable",
	StatusGatewayTimeout:                "Gateway Timeout",
	StatusHTTPVersionNotSupported:       "HTTP Version Not Supported",
	StatusVariantAlsoNegotiates:         "Variant Also Negotiates",
	StatusInsufficientStorage:           "Insufficient Storage",
	StatusLoopDetected:                  "Loop Detected",
	StatusNotExtended:                   "Not Extended",
	StatusNetworkAuthenticationRequired: "Network Authentication Required",
}

// StatusText返回HTTP状态码的文本。如果代码未知，则返回空的
// 字符串。
func StatusText(code int) string {
	return statusText[code]
}
